/*
 * Terminador.h
 *
 */

#ifndef TERMINADOR_H_
#define TERMINADOR_H_

#include <sys/wait.h>
#include <vector>
#include <list>

#include "../Seniales/SignalHandler.h"
#include "../Configuracion/Utils.h"
#include "../Mensajes/Cola.h"
#include "../Logger/Log.h"

using namespace std;

class Terminador : public EventHandler {

private:

	int tiempo;
	bool seguirEjecutando;
	bool enEjecucion;
	bool error;
	int cantidadPisos;
	vector<pid_t> pidAscensores;
	pid_t pidControlador;
	list<pid_t> pidPisos;

	void terminar();
	void exterminar();
	void eliminarColas();

public:

	Terminador( int tiempo, int cantidadPisos );
	virtual ~Terminador();
	int handleSignal ( int signum );
	void ejecutar();

	void agregarPidAscensor( pid_t pidAscensor, int numeroAscensor );
	pid_t getPidAscensor(int numeroAscensor) const;

	void setPidControlador( pid_t pidControlador );
	pid_t getPidControlador() const;

	void agregarPidPiso( pid_t pidPiso );
};

#endif /* TERMINADOR_H_ */
